// Case/Switch (Case/Switch选择结构) 示例
// 演示 Pascal 中 Case 选择结构的各种用法
program p_7_case_switch;

{$mode objfpc}{$H+}
// {$mode objfpc} 启用 Object Pascal 模式
// {$H+} 启用长字符串支持（AnsiString）

// 引入单元文件
uses
  SysUtils;  // 系统工具单元，包含常用的系统函数

// 定义枚举类型
type
  TWeekDay = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);
  TSeason = (Spring, Summer, Autumn, Winter);


// 所有变量声明移到这里
var
  number: Integer;
  grade: Char;
  score: Integer;
  month: Integer;
  day: TWeekDay;
  choice: Char;

// 程序主入口
begin
  WriteLn('=== Pascal Case 选择结构示例 ===');
  WriteLn;
  
  // 基本的Case语句（数字选择）
  WriteLn('1. 基本的Case语句 (数字选择):');
  number := 3;
  WriteLn('  数字: ', number);
  case number of
    1: WriteLn('  壹');
    2: WriteLn('  贰');
    3: WriteLn('  叁');
    4: WriteLn('  肆');
    5: WriteLn('  伍');
  else
    WriteLn('  未知数字');
  end;
  
  WriteLn;
  
  // 字符选择
  WriteLn('2. 字符选择:');
  grade := 'B';
  WriteLn('  成绩等级: ', grade);
  case grade of
    'A': WriteLn('  优秀');
    'B': WriteLn('  良好');
    'C': WriteLn('  中等');
    'D': WriteLn('  及格');
    'F': WriteLn('  不及格');
  else
    WriteLn('  无效等级');
  end;
  
  WriteLn;
  
  // 使用子范围
  WriteLn('3. 使用子范围:');
  score := 85;
  WriteLn('  分数: ', score);
  case score of
    90..100: WriteLn('  优秀 (90-100分)');
    80..89: WriteLn('  良好 (80-89分)');
    70..79: WriteLn('  中等 (70-79分)');
    60..69: WriteLn('  及格 (60-69分)');
    0..59: WriteLn('  不及格 (0-59分)');
  else
    WriteLn('  分数无效');
  end;
  
  WriteLn;
  
  // 使用逗号分隔多个值
  WriteLn('4. 使用逗号分隔多个值:');
  month := 7;
  WriteLn('  月份: ', month);
  case month of
    12, 1, 2: WriteLn('  冬季');
    3, 4, 5: WriteLn('  春季');
    6, 7, 8: WriteLn('  夏季');
    9, 10, 11: WriteLn('  秋季');
  else
    WriteLn('  无效月份');
  end;
  
  WriteLn;
  
  // 与枚举类型结合使用
  WriteLn('5. 与枚举类型结合使用:');
  day := Friday;
  WriteLn('  今天是星期五');
  case day of
    Monday: WriteLn('  星期一 - 新的一周开始');
    Tuesday: WriteLn('  星期二 - 继续努力');
    Wednesday: WriteLn('  星期三 - 一周过半');
    Thursday: WriteLn('  星期四 - 接近周末');
    Friday: WriteLn('  星期五 - 感谢上帝，今天是星期五！');
    Saturday: WriteLn('  星期六 - 周末开始');
    Sunday: WriteLn('  星期日 - 休息日');
  end;
  
  WriteLn;
  
  // 复合语句块
  WriteLn('6. 复合语句块:');
  choice := 'y';
  WriteLn('  用户选择: ', choice);
  case choice of
    'y', 'Y':
    begin
      WriteLn('  用户选择了确认');
      WriteLn('  执行确认操作');
      WriteLn('  操作完成');
    end;
    
    'n', 'N':
    begin
      WriteLn('  用户选择了取消');
      WriteLn('  取消操作');
      WriteLn('  返回主菜单');
    end;
  else
    WriteLn('  无效选择');
    WriteLn('  请重新输入');
  end;
  
  WriteLn;
  WriteLn('演示了 Pascal 中 Case 选择结构的各种用法');
  
  // 等待用户按键，防止程序窗口立即关闭
  ReadLn;
end.